package com.autowite.autowite.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.autowite.autowite.bean.PersonalInformation;
import com.autowite.autowite.listener.PersonalInformationListener;

import com.autowite.autowite.utils.FormFiller;
import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/excel")
public class ExcelController {

    List<PersonalInformation> list = new ArrayList<PersonalInformation>();



    @GetMapping("/list")
    public List<PersonalInformation> getList() {
        // 返回解析后的数据
        return this.list;
    }


    @DeleteMapping("/{idNumber}")
    public boolean remove(@PathVariable("idNumber") String idNumber) {
        return list.removeIf(next -> next.getIdNumber().equals(idNumber));
    }

    @GetMapping("/initialize")
    public Boolean initialize() {
        PersonalInformationListener listener = new PersonalInformationListener();
        // 使用 ClassPathResource 加载文件
        String filePath = "file/数据源.xlsx"; // 相对路径
        try {
            // 获取文件的实际路径
            URL fileUrl = this.getClass().getClassLoader().getResource(filePath);
            if (fileUrl == null) {
                throw new RuntimeException("文件路径无效: " + filePath);
            }
            // 如果文件名包含中文字符，需要进行解码
            String decodedFilePath = URLDecoder.decode(fileUrl.getPath(), StandardCharsets.UTF_8);
            // 检查文件是否存在
            File file = new File(decodedFilePath);
            if (!file.exists()) {
                throw new RuntimeException("文件不存在: " + decodedFilePath);
            }
            // 使用 EasyExcel 读取文件
            EasyExcel.read(decodedFilePath, PersonalInformation.class, listener)
                    .excelType(ExcelTypeEnum.XLSX) // 显式指定文件类型
                    .sheet()
                    .doRead();
            list = listener.getDataList();
            // 返回解析后的数据
            return true;
        } catch (Exception e) {
            throw new RuntimeException("加载文件失败: " + e.getMessage(), e);
        }
    }


    @GetMapping("/open")
    public String searchOnBaidu() {
        // 创建一个固定大小的线程池
        ExecutorService executorService = Executors.newFixedThreadPool(40); // 根据需要调整线程池大小
        for (PersonalInformation personalInformation : list) {
            executorService.submit(() -> {
                FormFiller formFiller = new FormFiller();
                formFiller.openPage("https://mcm.hxb.com.cn/p/coin/orderAdd.html");
                formFiller.fillForm(
                        personalInformation.getName(), // 兑换人姓名
                        personalInformation.getIdNumber(), // 证件号码
                        "150000", // 省份代码
                        "150101", // 城市代码
                        "150102", // 区域代码
                        "2150", // 网点代码
                        "20", // 兑换数量
                        personalInformation.getPhoneNumber() // 手机号
                );
            });
        }
        // 关闭线程池
        executorService.shutdown();
        try {
            // 等待所有任务完成
            executorService.awaitTermination(1, TimeUnit.HOURS);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return "成功: ";
    }

}
